package controlador;

import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.List;

import rmi.InterfazRemotaRest;
import rmi.ModeloRemoto;
import service.AperturaMesaSrv;
import service.CajaSrv;
import service.FacturaSrv;
import service.MesaSrv;
import service.PedidoSrv;


import beans.*;

public class TerminalCajero{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static TerminalCajero instancia = null;
	
	public static TerminalCajero getInstancia() {
		if(instancia == null) {
			instancia = new TerminalCajero();
		}
		return instancia;
	}


	public List<ItemCartaBean> obtenerItemsDePedido (MozoBean mozo, AperturaMesaBean apertMesa)
	{
		List<PedidoBean> pedidos = apertMesa.getPedidos();
		List<ItemCartaBean> itemCarta = new ArrayList<ItemCartaBean>();
		for (PedidoBean pedidoBean : pedidos) {
			List<ItemCartaBean> itemCartaAux = pedidoBean.getItems();
			for (ItemCartaBean itemCartaBean : itemCartaAux) {
				itemCarta.add(itemCartaBean);
			}
		}	
		return itemCarta;
	}
	
	
	
	public float cierreMesa(AperturaMesaBean apertMesa)
	{
		for (MesaBean mesa : apertMesa.getMesas()) {
			mesa.setEstado("ALIBERAR");
			//MesaSrv.getInstancia().guardarMesa(mesa);
		}
		AperturaMesaSrv.getInstancia().modificarAperturaMesa(apertMesa);
		
		FacturaBean factura = new FacturaBean();
		Float totalFactura = null;
		List<ItemCartaBean> itemsAux = new ArrayList<ItemCartaBean>();
		for (PedidoBean pedidoBean : apertMesa.getPedidos()) {
			for (ItemCartaBean itemCarta : pedidoBean.getItems()) {
				itemsAux.add(itemCarta);
				totalFactura = totalFactura + itemCarta.getPrecio();
			}
		}
		factura.setItemsCarta(itemsAux);
		FacturaSrv.getInstancia().guardarFactura(factura);	
		
		return totalFactura;
				
	}

	/**
	 * 
	 * @param apertMesa
	 * @param sucursal
	 * @return
	 */
	public float registrarPago(AperturaMesaBean apertMesa,SucursalBean sucursal,String formaPago)
	{
		
		FacturaBean factura = new FacturaBean();
		Float totalFactura = null;
		List<ItemCartaBean> itemsAux = new ArrayList<ItemCartaBean>();
		for (PedidoBean pedidoBean : apertMesa.getPedidos()) {
			for (ItemCartaBean itemCarta : pedidoBean.getItems()) {
				itemsAux.add(itemCarta);
				totalFactura = totalFactura + itemCarta.getPrecio();
			}
		}
		factura.setItemsCarta(itemsAux);
	

		
		if (formaPago.equals("Efectivo")) {
		sucursal.getCaja().setEfectivo(sucursal.getCaja().getEfectivo()+totalFactura);
				
		} else if (formaPago.equals("Tarjeta Credito")) 
		{
			sucursal.getCaja().setEfectivo(sucursal.getCaja().getTarjetaCredito()+totalFactura);
			
		} else 
		{
		sucursal.getCaja().setEfectivo(sucursal.getCaja().getTarjetaDebito()+totalFactura);
			
		}
		
		CajaSrv.getInstancia().guardarCaja(sucursal.getCaja());
		
		
	return totalFactura;
				
	}
	
	/**
	 * 
	 * @param apertMesa
	 * @param pedido
	 */
	public void registrarPedido (PedidoBean pedido,Integer idApertMesa)
	{
		pedido.setEstado("ENTREGADO");
		PedidoSrv.getInstancia().guardarPedido(pedido,idApertMesa);
	}
	
	


	
}
